package CanvaWeb.CanvaWeb.Service;

import CanvaWeb.CanvaWeb.Repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import CanvaWeb.CanvaWeb.pojo.User;

@Service
public class UserService {
    @Autowired
    private UserRepository userRepository;

    public User registerUser(String username, String password, String email, String phone) {
        if (userRepository.existsByUsername(username)) {
            throw new IllegalArgumentException("用户名已存在");
        }
        User user = new User();
        user.setUsername(username);
        user.setPassword(BCrypt.hashpw(password, BCrypt.gensalt())); // 加密存储密码
        user.setEmail(email);
        user.setPhone(phone);
        return userRepository.save(user);
    }

    // 用户登录方法，校验用户名和密码
    public User loginUser(String username, String password) {
        User user = userRepository.findByUsername(username);
        if (user != null && verifyPassword(password, user.getPassword())) {
            return user; // 校验成功，返回用户
        }
        return null; // 登录失败
    }

    // 根据 ID 获取用户信息
    public User getUserById(Long id) {
        return userRepository.findById(id).orElse(null);
    }

    // 私有方法：加密密码
    private String encryptPassword(String password) {
        // 示例使用 BCrypt 进行加密
        return BCrypt.hashpw(password, BCrypt.gensalt());
    }

    // 私有方法：校验密码
    private boolean verifyPassword(String rawPassword, String encryptedPassword) {
        return BCrypt.checkpw(rawPassword, encryptedPassword);
    }

    // 更新用户信息，包括用户名、密码、邮箱、电话
    public User updateUser(Long id, String username, String password, String email, String phone) {
        // 检查用户是否存在
        User user = userRepository.findById(id).orElseThrow(() ->
                new IllegalArgumentException("用户不存在"));

        // 更新用户名（如果提供了新用户名）
        if (username != null && !username.isEmpty()) {
            user.setUsername(username);
        }

        // 更新密码（如果提供了新密码）
        if (password != null && !password.isEmpty()) {
            // 对密码进行加密存储（如使用 BCrypt）
            user.setPassword(BCrypt.hashpw(password, BCrypt.gensalt())); // 加密存储新密码
        }

        // 更新邮箱
        if (email != null && !email.isEmpty()) {
            user.setEmail(email);
        }

        if (phone != null && !phone.isEmpty()) {
            user.setPhone(phone);
        }

        return userRepository.save(user);
    }

    // 系统逻辑：更新分数（例如游戏胜利或失败时）
    public User updateUserScore(Long id, Integer newScore) {
        User user = userRepository.findById(id).orElse(null);
        if (user != null) {
            user.setScore(newScore);
            return userRepository.save(user);
        } else {
            throw new IllegalArgumentException("用户不存在");
        }
    }
}

